/*
 * 版权所有 (c) 2010-2011, MiCode 开源社区 (www.micode.net)
 *
 * 根据 Apache 许可证第 2.0 版（“许可证”）进行授权；
 * 除非遵守许可证，否则您不得使用此文件。
 * 您可以从以下网址获取许可证的副本：
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * 除非适用法律要求或书面同意，依照许可证分发的软件是按“原样”提供的，
 * 不附带任何明示或暗示的担保或条件。
 * 有关许可证下的特定语言的权限和限制，请参见许可证。
 */

package net.micode.notes.model;

import android.appwidget.AppWidgetManager;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.text.TextUtils;
import android.util.Log;

import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.CallNote;
import net.micode.notes.data.Notes.DataColumns;
import net.micode.notes.data.Notes.DataConstants;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.data.Notes.TextNote;
import net.micode.notes.tool.ResourceParser.NoteBgResources;

public class WorkingNote {
    // 正在处理的笔记
    private Note mNote;
    // 笔记 ID
    private long mNoteId;
    // 笔记内容
    private String mContent;
    // 笔记模式
    private int mMode;
    private long mAlertDate; // 提醒日期
    private long mModifiedDate; // 修改日期
    private int mBgColorId; // 背景颜色 ID
    private int mWidgetId; // 小部件 ID
    private int mWidgetType; // 小部件类型
    private long mFolderId; // 文件夹 ID
    private Context mContext; // 上下文
    private static final String TAG = "WorkingNote"; // 日志标签
    private boolean mIsDeleted; // 是否被标记为删除
    private NoteSettingChangedListener mNoteSettingStatusListener; // 笔记设置变化监听器

    // 数据库查询所需的列
    public static final String[] DATA_PROJECTION = new String[] {
            DataColumns.ID,
            DataColumns.CONTENT,
            DataColumns.MIME_TYPE,
            DataColumns.DATA1,
            DataColumns.DATA2,
            DataColumns.DATA3,
            DataColumns.DATA4,
    };

    public static final String[] NOTE_PROJECTION = new String[] {
            NoteColumns.PARENT_ID,
            NoteColumns.ALERTED_DATE,
            NoteColumns.BG_COLOR_ID,
            NoteColumns.WIDGET_ID,
            NoteColumns.WIDGET_TYPE,
            NoteColumns.MODIFIED_DATE
    };

    // 数据库列索引
    private static final int DATA_ID_COLUMN = 0;
    private static final int DATA_CONTENT_COLUMN = 1;
    private static final int DATA_MIME_TYPE_COLUMN = 2;
    private static final int DATA_MODE_COLUMN = 3;

    private static final int NOTE_PARENT_ID_COLUMN = 0;
    private static final int NOTE_ALERTED_DATE_COLUMN = 1;
    private static final int NOTE_BG_COLOR_ID_COLUMN = 2;
    private static final int NOTE_WIDGET_ID_COLUMN = 3;
    private static final int NOTE_WIDGET_TYPE_COLUMN = 4;
    private static final int NOTE_MODIFIED_DATE_COLUMN = 5;

    // 创建新的笔记
    private WorkingNote(Context context, long folderId) {
        mContext = context;
        mAlertDate = 0;
        mModifiedDate = System.currentTimeMillis(); // 设置修改日期为当前时间
        mFolderId = folderId; // 设置文件夹 ID
        mNote = new Note(); // 初始化笔记对象
        mNoteId = 0; // 笔记 ID 初始化为 0
        mIsDeleted = false; // 初始化为未删除
        mMode = 0; // 初始模式
        mWidgetType = Notes.TYPE_WIDGET_INVALIDE; // 初始化小部件类型
    }

    // 加载现有的笔记
    private WorkingNote(Context context, long noteId, long folderId) {
        mContext = context;
        mNoteId = noteId; // 设置笔记 ID
        mFolderId = folderId; // 设置文件夹 ID
        mIsDeleted = false; // 初始化为未